package knn;

import java.util.AbstractCollection;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 *
 * @author Rodrigo
 */
public class Ejemplo {
	// es un mapeo directo de un ejemplo de entrenamiento, por ej: p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u
	// vale aclarar que el primer valor (el 0) es el target attribute que puede valer 'e' (comestible) o 'p' (venenoso)

	private char[] valores;

	Ejemplo(char[] vals) {
		valores = vals;
	}

	char getVal(int i) {
		return valores[i];
	}

	void imprimir() {
		for (int i = 0; i < valores.length; i++) {
			System.out.print(this.getVal(i) + ",");
		}
		System.out.println();
	}
	
	double distancia(Ejemplo ejemplo) throws Exception{
		double dist = 0;
		for (int i = 1; i < valores.length; i++){
			if (this.getVal(i) != ejemplo.getVal(i)) {
				dist = dist + 1;
			}
		}
		if (dist == 0) {
			throw new Exception ("Distancia no puede ser 0");
		}
		return Math.sqrt(dist);
	}
	
	SortedSet<ParDistanciaResultado> obtenerMasCercanos(AbstractCollection<Ejemplo> ejemplos) throws Exception{
		SortedSet<ParDistanciaResultado> result;
		result = new TreeSet();
		Iterator it = ejemplos.iterator();

		while (it.hasNext()) {
			
			Ejemplo actual  = (Ejemplo)it.next();
			result.add(new ParDistanciaResultado(actual.getVal(0),this.distancia(actual)));
		}

		return result;
	}
	
}
